#pragma once
#include <string>
using namespace std;
#include <iostream>
#include <vector>

class Ingredients
{
private:
	string ingre_name;
	int ingre_num;
	double ingre_cost;
public:

	Ingredients()
	{
		ingre_name = "";
		ingre_cost = 0;
		ingre_num - 0;
	}
	Ingredients(int& a_num, double& a_cost, string& a_name)
	{
		ingre_name = a_name;
		ingre_num = a_num;
		ingre_cost = a_cost;
	}
	Ingredients(Ingredients& i)

	{
		ingre_cost = i.ingre_cost;
		ingre_name = i.ingre_name;
		ingre_num = i.ingre_num;

	}
	Ingredients& operator= (Ingredients& i)
	{
		ingre_cost = i.ingre_cost;
		ingre_name = i.ingre_name;
		ingre_num = i.ingre_num;
		return *this;
	}
	
};

class DIshes
{
private:
	double price;
	vector<Ingredients> ingredients;
	string dish_type;
public:
	DIshes()
	{
		price = 0;
		
		;
		dish_type = " ";
		
	}
	DIshes(double& a_pricie, vector<Ingredients> a_ingredients, string& a_dish_type)
	{
		price = a_pricie;
		ingredients = a_ingredients;
		dish_type = a_dish_type;

	}
	DIshes(DIshes& d)
	{
		
		price = d.price;
		ingredients = d.ingredients;
		dish_type = d.dish_type;
		
	}
	DIshes& operator- (DIshes& d)
	{
		price = d.price;
		ingredients =  d.ingredients;
		dish_type = d.dish_type;
		return *this;
	}

	
};

class Desk
{
private:
	int desk_id;
	int chairs;
public:
	Desk()
	{
		desk_id = 0;
		chairs = 0;
		
	}
	Desk(int&a_desk_id, int& a_chairs)
	{
		desk_id = a_desk_id;
		chairs = a_chairs;
		
	}
	Desk(Desk& d)
	{
		desk_id = d.desk_id;
		chairs = d.chairs;

	}
	Desk& operator= (Desk& d)
	{
		desk_id = d.desk_id;
		chairs = d.chairs;
		return *this;
	}
};


class Itedms_Order
{
private:
	int order_id;
	double order_cost;
	vector<DIshes> order_dishes;
	string order_time;
	Desk order_desk;
public:
	Itedms_Order()
	{
		order_id = 0;
		order_cost = 0;
		order_time = "";
				
	}
	Itedms_Order(int& a_id, double& a_cost, vector<DIshes>& a_order_dishes, string& a_order_time, Desk& d)
	{
		order_id = a_id;
		order_cost = a_cost;
		order_dishes = a_order_dishes;
		order_time = a_order_time;
		order_desk = d;

	}
	Itedms_Order & operator= ( Itedms_Order & i )

	{
		order_id = i.order_id;
		order_cost = i.order_cost;
		order_dishes = i.order_dishes;
		order_desk =  i.order_desk;
		order_time = i.order_time;
		return *this;
		
	}
	Itedms_Order(Itedms_Order& i)
	{
		order_id = i.order_id;
		order_cost = i.order_cost;
		order_dishes = i.order_dishes;
		order_desk = i.order_desk;
		order_time = i.order_time;
	}
	
};
class cook
{
private:
	int cook_id;
	bool flag;
public:
	cook()
	{
		cook_id = 0;
		flag = true;


	}
	cook(int& a_cook_id, bool& a_flag)
	{
		cook_id = a_cook_id;
		flag - a_flag;
	}
	cook(cook &c)
	{
		cook_id = c.cook_id;
		flag = c.flag;
	}
	cook& operator= (cook& c)
	{
		cook_id = c.cook_id;
		flag = c.flag;
		return *this;
	}
	bool isFree()
	{
		return this->flag;
	}
};

class waitor
{
private:
	int waitor_id;
	bool flag;
public:
	waitor()
	{
		waitor_id = 0;
		flag = true;
	}
	waitor(int& a_waitor_id, bool& a_flag)
	{
		waitor_id = a_waitor_id;
		flag = a_flag;
	}
	waitor(waitor& w)
	{
		waitor_id = w.waitor_id;
		flag = w.flag;
	}
	waitor& operator= (waitor& w)
	{
		waitor_id = w.waitor_id;
		flag = w.flag;
		return *this;
	}
};

